package com.dzl.card.service;

import com.dzl.base.service.BaseService;
import com.dzl.card.pojo.WelfareCardSecret;
import com.dzl.card.pojo.dto.WelfareCardSecretDto;
import com.dzl.card.pojo.dto.WelfareMoveCardSecretAmountDto;
import com.dzl.card.pojo.query.WelfareCardSecretQuery;
import com.dzl.card.pojo.vo.WelfareCardExchangeSecretVo;
import com.dzl.card.pojo.vo.WelfareCardSecretVo;
import com.dzl.card.pojo.vo.WelfareUserCardSecretVo;
import com.dzl.fee.pojo.WelfareFeeUserCustomers;
import com.dzl.fee.pojo.WelfareFeeUserSales;
import com.dzl.fee.pojo.query.WelfareSalesCustomersQuery;
import com.dzl.userwx.pojo.WelfareUserWx;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * 卡密信息表(WelfareCardSecret)表服务接口
 * @author ChenLong
 * @since 2021-05-14 20:19:43
 */
public interface WelfareCardSecretService extends BaseService<WelfareCardSecret> {

    /**
     * 增加用户绑定卡和手机号
     * @author ChenLong
     * @date 2021-07-10 09:42:44
     * @param welfareUserWx 微信用户对象
     * @param secret 卡密
     * @return java.util.Map<java.lang.String,java.lang.Object>
     **/
    Map<String, Object> addUserCardAndPhoneBind(WelfareUserWx welfareUserWx, String secret);

    /**
     * 增加用户绑定卡
     * @param secret 卡密
     * @param userId 用户id
     * @return int
     * @author ChenLong
     * @since 2021-05-19 15:56:36
     **/
    Map<String, Object> addUserCardBind(String secret, Integer userId, Integer enterpriseId);

    /**
     * 根据密码获取卡或兑换券信息
     * @author ChenLong
     * @date 2021-07-10 11:01:30
     * @param secret 卡密
     * @return com.dzl.cardsecret.pojo.vo.WelfareCardExchangeSecretVo
     **/
    List<WelfareCardExchangeSecretVo> getCardExchangeInfoBySecret(String secret);

    /**
     * 获取用户绑定的福利卡
     * @author ChenLong
     * @since 2021-05-19 16:03:57
     * @param userId 用户id
     * @return java.util.List<com.dzl.cardsecret.entity.WelfareCardSecret>
     **/
    List<WelfareUserCardSecretVo> getUserCardBindList(Integer userId);

    /**
     * 获取用户绑定的卡列表
     * @author ChenLong
     * @date 2021-06-08 16:50:04
     * @param userId 用户id
     * @return java.util.List<com.dzl.cardsecret.pojo.vo.WelfareUserCardSecretVo>
     **/
    List<WelfareUserCardSecretVo> getUserCardBindListForOrderPay(Integer userId);

    /**
     * 获取福利卡详情
     * @author ChenLong
     * @since 2021-05-19 16:03:57
     * @param cardSecretId 卡密id
     * @return java.util.List<com.dzl.cardsecret.entity.WelfareCardSecret>
     **/
    WelfareUserCardSecretVo getUserCardBindInfo(Integer cardSecretId);

    /**
     * 分页查询卡密列表
     * @date 2021/5/19 17:17
     * @author caobucao
     * @param query 查询条件
     * @return java.util.List<com.dzl.cardsecret.entity.vo.WelfareCardSecretVo>
     */
    PageInfo<WelfareCardSecretVo> selectWelfareCardSecretVoListPage(WelfareCardSecretQuery query);

    /**
     * 批量激活、冻结、解冻卡密
     * @date 2021/5/19 18:50
     * @author caobucao
     * @param dto 操作卡密对象
     * @return Integer 影响条数
     */
    Integer updateBatchCardSecretByIds(WelfareCardSecretDto dto);

    /**
     * 通过ids导出数据
     * @date 2021/5/20 9:47
     * @author caobucao
     * @param ids 选中卡密id
     * @return java.util.List<com.dzl.cardsecret.entity.vo.WelfareCardSecretVo>
     */
    List<WelfareCardSecretVo> selectWelfareCardSecretVoListByIds(String ids);

    /**
     * 通过用户ID查询用户卡的详细信息
     * @date 2021/5/18 15:14
     * @author caobucao
     * @param id 用户id
     * @return java.util.List<com.dzl.cardsecret.entity.vo.WelfareUserCardSecretVo>
     */
    List<WelfareUserCardSecretVo> selectUserCardSecretVoListByUserId(Integer id);

    /**
     * 通过用户ID, 卡密id查询用户未过期的卡的详细信息
     * @date 2021/5/18 15:14
     * @author caobucao
     * @param userId 用户id
     * @return java.util.List<com.dzl.cardsecret.entity.vo.WelfareUserCardSecretVo>
     */
    List<WelfareUserCardSecretVo> getUserWxCardInfoListNoExpiredById(Integer userId, Integer cardSecretId,
                                                                     Integer notIncludedCardSecretId);

    /**
     * 定时刷新过期卡密的过期状态
     * @date 2021/5/26 16:05
     * @author caobucao
     * @return java.lang.Integer
     */
    //Integer updateIsExpiredByExpiredTime();

    /**
     * 查询卡密详情
     * @date 2021/7/30 15:27
     * @author caobucao
     * @param number secret卡号或卡密
     * @return com.dzl.cardsecret.pojo.vo.WelfareCardSecretVo
     */
    WelfareCardSecretVo queryWelfareCardSecretVoByNumberOrSecret(String number, String secret);

    /**
     * 查询当前年份的卡密总数
     * @date 2021/7/30 16:29
     * @author caobucao
     * @param s K+年份后两位
     * @return java.lang.Integer
     */
    Integer selectCountYearCard(String s);

    /**
     * 查询该卡组下面的业务员
     * @date 2021/9/18 10:25
     * @author caobucao
     * @param query 查询条件
     * @return java.util.List<com.dzl.fee.pojo.WelfareFeeUserSales>
     */
    List<WelfareFeeUserSales> selectSalesByCardId(WelfareSalesCustomersQuery query);

    /**
     * 查询该卡组下面的客户
     * @date 2021/9/18 10:42
     * @author caobucao
     * @param query 查询条件
     * @return java.util.List<com.dzl.fee.pojo.WelfareFeeUserCustomers>
     */
    List<WelfareFeeUserCustomers> selectCustomersByCardId(WelfareSalesCustomersQuery query);

    /**
     * 卡福力值转移
     * @date 2021/11/3 15:26
     * @author caobucao
     * @param dto 卡id、福利值、比例
     * @return java.lang.Integer
     */
    Integer moveCardSecretAmount(WelfareMoveCardSecretAmountDto dto);

    /**
     * 描述:  分页查询平台服务端福利卡池列表
     * @date 2022/2/15 11:26
     * @author wangchao
     * @Param [secretQuery] 福利卡池查询条件
     * @return java.util.List<com.dzl.card.pojo.vo.CardSecretPageVo> 福利卡池列表对象
     **/
    //PageInfo<CardSecretPageVo> queryCardSecretListPage(WelfareCardSecretQuery secretQuery);
}
